from multiprocessing import Pool
import os, time, random
def child_task(name):
  print("子进程%s ID是：%s 正在运行"%(name, os.getpid()))
  start=time.time()
  time.sleep(random.random()*3) # 随机睡眠一段时间
  end=time.time()
  print("子进程%s 运行了：%0.2f"%(name, end-start))
if __name__=="__main__": # 交互模式自动开始执行
  print("父进程%s 正在运行"%os.getpid())
  p=Pool(processes=4) # 创建一个进程池，最多允许4个进程同时运行
  for i in range(5): # 循环5次，依次向进程池中添加5个任务，第5个需要等待
    p.apply_async(child_task, args=(i,)) # 传入子进程要执行的函数和函数参数（以元组形式）
  print("父进程%s 正在等待子进程运行完成"%os.getpid())
  p.close() # 关闭进程池，不再接受新的任务
  p.join() # 如果有进程池，调用join前必须调用close()，否则会报错
  print("父进程%s 运行结束"%os.getpid())